import { createRouter, createWebHistory } from 'vue-router';
import { useUserStore } from '@/stores/user';
import { staticRoutes, layoutRoute } from './routes';
import { usePermissionStore } from '@/stores/permission';

const router = createRouter({
  history: createWebHistory(), // 移除环境变量参数
  routes: [...staticRoutes, layoutRoute],
  scrollBehavior: () => ({ top: 0 })
});

const whiteList = ['/login', '/404', '/front'];

router.beforeEach(async (to, from, next) => {
  const userStore = useUserStore();
  const permissionStore = usePermissionStore();

  // 设置页面标题
  document.title = to.meta.title ? `${to.meta.title} - 小花在线图书馆` : '小花在线图书馆';

  // 调试信息
  console.log('[路由守卫] 路径:', to.path, 'Token状态:', !!userStore.library_token);

  // 白名单检查（支持前缀匹配）
  if (whiteList.some(path => to.path.startsWith(path))) {
    return next();
  }

  // 未登录处理
  if (!userStore.library_token) {
    return next(`/login?redirect=${encodeURIComponent(to.fullPath)}`);
  }

  // 已登录处理
  if (userStore.library_token) {
    // 获取用户信息
    if (!userStore.roles.length) {
      try {
        const { data } = await userStore.getUserInfo();
        userStore.roles = data.roles;
      } catch (error) {
        userStore.logout();
        return next('/login');
      }
    }

    // 修改后的动态路由处理模块
    if (!permissionStore.hasGenerated) {
      console.log('[路由守卫] 开始生成动态路由');
      
      // 清空旧路由（新增调试日志）
      permissionStore.routes.forEach(route => {
        if (router.hasRoute(route.name)) {
          console.log(`[路由清理] 正在移除路由: ${route.name}`);
          router.removeRoute(route.name);
        }
      });
    
      // 生成新路由（确保包含基础路由）
      await permissionStore.generateRoutes(userStore.roles);
      
      // 添加调试信息
      console.log('[生成路由] 权限路由:', permissionStore.routes);
      
      // 添加新路由到布局路由下（确保父路由存在）
      permissionStore.routes.forEach(route => {
        console.log(`[路由注入] 正在添加: ${route.path}`);
        router.addRoute('Layout', route); // 直接使用完整路由对象
      });
    
      // 添加默认重定向（关键修复）
      router.addRoute('Layout', {
        path: '',
        redirect: '/dashboard'
      });
    
      permissionStore.setHasGenerated(true);
      console.log('[路由表] 当前有效路由:', router.getRoutes());
      return next({ path: to.path, query: to.query, hash: to.hash, replace: true });
    }

    // 禁止重复访问登录页
    if (to.path === '/login') {
      return next('/dashboard');
    }
  }

  next();
});

export default router;